import page_content from "../model/page-content";
import page_list from "../model/page-list";

/*
 * @LastEditors: yuSeen
 * @LastEditTime: 2021-11-28 16:40:20
 * 天凉好个秋
 */
interface IPageList {
  name: string;
  is_using: number;
}
class pageServer {
  /**
   * @description: 获取页面列表
   * @param {number} pageIndex 页码
   * @param {number} limit 每页数据条数
   * @return {*}
   */
  getPageList(pageIndex: number = 1, limit: number = 10) {
    return page_list.findAndCountAll({
      limit,
      offset: (pageIndex - 1) * limit,
      order: [["id", "DESC"]]
    });
  }

  /**
   * @description: 根据页面id获取页面内容, 不传则获取默认内容
   * @param {number} id
   * @return {*}
   */
  getPageContent(id: number | string = 1) {
    if (id == "undefined") id = 1;
    return page_content.findOne({
      include: {
        attributes: ["id", "name"],
        model: page_list,
      },
      where: {
        page_id: id,
      },
    });
  }

  /**
   * @description: 根据版本名获取内容
   * @param {string} name 版本名
   */
  getPageByName(name: string) {
    return page_list.findOne({
      include: [page_content],
      where: {
        name,
      },
    });
  }

  /**
   * @description: 获取当前正在使用的版本
   * @param {*}
   * @return {*}
   */
  getCurPage() {
    return page_list.findOne({
      include: {
        attributes: ["content"],
        model: page_content,
      },
      where: {
        is_using: 1,
      },
    });
  }

  /**
   * @description: 添加页面到列表
   * @param {IPageList} 页面数据
   * @return {*}
   */
  addPage(data: IPageList) {
    return page_list.create(data);
  }

  /**
   * @description: 添加页面内容
   * @param {number} id 页面id
   * @param {object} content  页面内容
   * @return {*}
   */
  addPageContent(id: number, content: object) {
    return page_content.create({
      page_id: id,
      content: JSON.stringify(content),
    });
  }

  // 将指定版本设为使用状态
  async setActive(id: number) {
    // 将其他版本的is_using字段都设为0
    await page_list.update({ isUsing: 0 }, { where: {} });
    return page_list.update({ isUsing: 1 }, { where: { id } });
  }

  //   根据id删除页面列表
  deletePage(id: number) {
    return page_list.destroy({
      where: {
        id
      },
    });
  }

  //   根据id删除页面内容
  deletePageContent(id: number) {
    return page_content.destroy({
      where: {
        page_id: id
      },
    });
  }
}

export default new pageServer();
